///* =====  TbStudentServiceImpl  ===== */
//package com.yyb.service.impl;
//
//import com.github.pagehelper.PageHelper;
////import com.github.pagehelper.PageInfo as MybatisPageInfo;
//import com.yyb.common.PageInfo;
//import com.yyb.domain.TbStudent;
//import com.yyb.dto.*;
//import com.yyb.mapper.TbStudentMapper;
//import com.yyb.service.TbStudentService;
//import com.yyb.vo.TbStudentVO;
//import jakarta.validation.ValidationException;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.BeanUtils;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.List;
//import java.util.Objects;
//import java.util.stream.Collectors;
//
///**
// * 学生管理业务实现
// */
//@Slf4j
//@Service
//@RequiredArgsConstructor
//public class TbStudentServiceImpl implements TbStudentService {
//
//    private final TbStudentMapper studentMapper;
//
//    @Override
//    public PageInfo<TbStudentVO, TbStudentQueryDTO> listStudentPage(TbStudentQueryDTO dto) {
//        PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
//        // ❗️如有复杂搜索条件，可扩展自定义 mapper 方法 selectByCondition(dto)
//        List<TbStudent> entityList = studentMapper.selectList(dto); // ⬅️ 自行扩展
//        MybatisPageInfo<TbStudent> page = new MybatisPageInfo<>(entityList);
//
//        List<TbStudentVO> voList = entityList.stream()
//                .map(this::toVO)
//                .collect(Collectors.toList());
//        return PageInfo.of(voList, dto, page.getTotal());
//    }
//
//    @Transactional
//    @Override
//    public TbStudentVO addStudent(TbStudentAddDTO dto) {
//        TbStudent entity = new TbStudent();
//        BeanUtils.copyProperties(dto, entity);
//        studentMapper.insertSelective(entity);
//        return toVO(entity);
//    }
//
//    @Transactional
//    @Override
//    public TbStudentVO updateStudent(TbStudentUpdateDTO dto) {
//        TbStudent entity = studentMapper.selectByPrimaryKey(dto.getId());
//        if (Objects.isNull(entity)) {
//            throw new ValidationException("学生不存在");
//        }
//        BeanUtils.copyProperties(dto, entity);
//        studentMapper.updateByPrimaryKeySelective(entity);
//        return toVO(entity);
//    }
//
//    @Transactional
//    @Override
//    public void deleteStudent(Long id) {
//        studentMapper.deleteByPrimaryKey(id);
//    }
//
//    @Transactional
//    @Override
//    public void deleteStudentBatch(List<Long> ids) {
//        if (ids == null || ids.isEmpty()) { return; }
//        ids.forEach(studentMapper::deleteByPrimaryKey);
//    }
//
//    @Override
//    public TbStudentVO getStudent(Long id) {
//        return toVO(studentMapper.selectByPrimaryKey(id));
//    }
//
//    /* ------------------ 内部工具 ------------------ */
//    private TbStudentVO toVO(TbStudent entity) {
//        if (entity == null) { return null; }
//        TbStudentVO vo = new TbStudentVO();
//        BeanUtils.copyProperties(entity, vo);
//        return vo;
//    }
//}
